﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EveMarketsDAO.Fonction;

namespace EveMarketsDAO
{
    /// <summary>
    /// Singleton pour l'accès à la base de donnée.
    /// </summary>
    public partial class ContexteDAO
    {
		private static FonctionCalculateur _fonctionCalculateur;
    	public static FonctionCalculateur FonctionCalculateur
		{
			get { return _fonctionCalculateur; }
			set { _fonctionCalculateur = value; }
		}

		[ThreadStatic]
        private static EveIndusEntities _contexteDonnees;
        private static EveIndusEntities Contexte
        {
            get { return _contexteDonnees; }
            set { _contexteDonnees = value; }
        }

    	private static FonctionMarkets _fonctionMarkets;
		public static FonctionMarkets FonctionMarkets
		{
			get { return _fonctionMarkets; }
			set { _fonctionMarkets = value; }
		}

		private static FonctionsBasique _fonctionsBasique;
		public static FonctionsBasique FonctionsBasique
		{
			get { return _fonctionsBasique; }
			set { _fonctionsBasique = value; }
		}

        /// <summary>
        /// Constructeur en private.
        /// </summary>
        static ContexteDAO()
        {
            ContexteDAO.Contexte = new EveIndusEntities();
			FonctionCalculateur = new FonctionCalculateur();
			FonctionMarkets = new FonctionMarkets();
			FonctionsBasique = new FonctionsBasique();
        }

        /// <summary>
        /// Crée un contexte.
        /// </summary>
        /// <returns></returns>
        private static EveIndusEntities CreerContexteDonnees()
        {
            // Création du contexte de données.
            EveIndusEntities oContexteDonnees = new EveIndusEntities();

			// Le timeOut pour le Contexte est de 10minutes.
        	oContexteDonnees.CommandTimeout = 600;

            // Retour.
            return oContexteDonnees;
        }

        /// <summary>
        /// Sauvegarde le contexte.
        /// </summary>
        public static void Enregistrer()
        {
            ContexteDAO.ContexteDonnees.SaveChanges();
        }

        public static EveIndusEntities ContexteDonnees
        {
            get
            {
                // Variables locales.
                EveIndusEntities oContexteDonnees = null;

                oContexteDonnees = Contexte ?? ContexteDAO.CreerContexteDonnees();

                return oContexteDonnees;
            }
        }



    	/// <summary>
        /// Permet de supprimer le contexte.
        /// </summary>
        public static void SupprimerContexte()
        {
            Contexte = null;
        }
		
	}
}
